﻿using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;

namespace Black.SurfaceToolkit.Converters
{
    /// <summary>
    /// Obtient le style en fonction de la position d'un élément de graduation.
    /// Ne fonctionne qu'en <see cref="F:System.Windows.Data.BindingMode.OneWay" /> ou <see cref="F:System.Windows.Data.BindingMode.OneTime" />.
    /// </summary>
    public class StyleSelectorConverter : IMultiValueConverter
    {
        #region Constructeurs

        /// <summary>
        /// Initalise une nouvelle instance de <see cref="T:Black.SurfaceToolkit.Converters.StyleSelectorConverter" />.
        /// </summary>
        public StyleSelectorConverter()
            : base()
        {
        }

        #endregion

        #region Fonctions publiques

        /// <summary>
        /// Obtient le style des valeurs spécifiées.
        /// </summary>
        /// <param name="p_oValues">Valeur de la liste puis position, style normal et style de séléction de l'élément.</param>
        /// <param name="p_oTargetType">Type de destination.</param>
        /// <param name="p_oParameter">Paramètre de convertion.</param>
        /// <param name="p_oCulture">Culture de convertion.</param>
        /// <returns>Style des valeurs spécifiées.</returns>
        public object Convert(object[] p_oValues, Type p_oTargetType, object p_oParameter, CultureInfo p_oCulture)
        {
            double dValue = (double)p_oValues[0];
            double dPosition = (double)p_oValues[1];
            Style oNormalStyle = (Style)p_oValues[2];
            Style oSelectedStyle = (Style)p_oValues[3];

            return ((dValue == dPosition) ? oSelectedStyle : oNormalStyle);
        }

        /// <summary>
        /// Obtient les valeurs du style spécifié.
        /// </summary>
        /// <param name="p_oValue">Style de l'élément.</param>
        /// <param name="p_oTargetTypes">Types de destination.</param>
        /// <param name="p_oParameter">Paramètre de convertion.</param>
        /// <param name="p_oCulture">Culture de convertion.</param>
        /// <returns>Valeurs du style spécifié.</returns>
        /// <exception cref="T:System.NotSupportedException">Pour tout appel.</exception>
        public object[] ConvertBack(object p_oValue, Type[] p_oTargetTypes, object p_oParameter, CultureInfo p_oCulture)
        {
            throw new NotSupportedException("ConvertBack not supported.");
        }

        #endregion
    }
}
